home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 526-550 / disk_539 / pf / source / max.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  87 lines

  1. /**
  2.  | "Quick and Dirty" program - MAX <filename> scans filename
  3.  | and prints on stdout the length of the longest line, and
  4.  | information about non-printable characters eventually
  5.  | present in <filename>. MLO 910505
  6. **/
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <ctype.h>
  11.  
  12. #define BUFFER_LEN    256
  13. #define INFO_DIM      128
  14.  
  15. int  nFound = 0;
  16. char found[INFO_DIM] = "";
  17. long cFound[INFO_DIM];
  18.  
  19. void PutInfo(int c);
  20.  
  21. main(
  22.   int argc,
  23.   char **argv
  24. ){
  25.   FILE *fp;
  26.   char buffer[BUFFER_LEN];
  27.   char *pc;
  28.   int n, i, j;
  29.   int max = 0;
  30.   int tot_lines = 0;
  31.   long tot_bytes = 0;
  32.  
  33.   if (argc != 2)    exit(0);
  34.   if ((fp = fopen(*(++argv), "r")) == NULL) {
  35.     fprintf(stderr, "Can't open file %s...\n\n", *argv);
  36.   } else {
  37.     while (fgets(buffer, BUFFER_LEN, fp) != NULL) {
  38.       if ((n = strlen(buffer)) > max)   max = n;
  39.       tot_lines++;
  40.       n--;
  41.       for (pc=buffer; *pc; pc++) {
  42.         if (!isprint(*pc)  &&  *pc != '\t'  &&  *pc != '\n') {
  43.           PutInfo(*pc);
  44.         }
  45.       }
  46.       tot_bytes += (n - 1);
  47.     }
  48.     fclose(fp);
  49.     fprintf(stdout,
  50.       "\nFile: %s\n"
  51.       "%d characters in %d lines;\n"
  52.       "maximum line length is %d characters.\n",
  53.       *argv, tot_bytes, tot_lines, max);
  54.     if (nFound) {
  55.       fprintf(stdout, "\n%d unprintable characters found:\n", nFound);
  56.       for (i=0; found[i]; i++) {
  57.         fprintf(stdout, "0x%02X ", found[i]);
  58.         if (isprint( (j = found[i] + 0x40))) {
  59.           fprintf(stdout, "(CTRL-%c): ", j);
  60.         } else {
  61.           fprintf(stdout, "        : ");
  62.         }
  63.         fprintf(stdout, "%d\n", cFound[i]);
  64.       }
  65.     }
  66.     fprintf(stdout, "\n");
  67.   }
  68.   exit(0);
  69. }
  70.  
  71. void PutInfo(
  72.   int c
  73. ){
  74.   char *pC;
  75.  
  76.   if ( (pC = strchr(found, c)) == NULL) {
  77.     if (nFound == INFO_DIM) {
  78.       fprintf(stderr, "Too few characters in info buffer!\n");
  79.     } else {
  80.       found[nFound] = c;
  81.       cFound[nFound++] = 1;
  82.     }
  83.   } else {
  84.     (cFound[pC - found])++;
  85.   }
  86. }
  87.